#include "pybind11/pybind11.h"

#define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x)

namespace py = pybind11;

void bind_indi_filter(py::module &m);

void bind_indi_ma_macd(py::module &m);
void bind_indi_ma_osc(py::module &m);
void bind_indi_ma_rsi(py::module &m);
void bind_indi_ma(py::module &m);

void bind_indi(py::module &m);

void bind_indi_ordered(py::module &m);

void bind_indi_s2_band(py::module &m);
void bind_indi_s2_cov(py::module &m);
void bind_indi_s2_var(py::module &m);
void bind_indi_s2_zscore(py::module &m);

void bind_indi_s4_kurtosis(py::module &m);
void bind_indi_s4_skewness(py::module &m);
void bind_indi_s4(py::module &m);
void bind_indi_scale(py::module &m);

PYBIND11_MODULE(_manano, m)
{

    bind_indi_filter(m);

    bind_indi_ma_macd(m);
    bind_indi_ma_osc(m);
    bind_indi_ma_rsi(m);
    bind_indi_ma(m);

    bind_indi(m);

    bind_indi_ordered(m);

    bind_indi_s2_band(m);
    bind_indi_s2_cov(m);
    bind_indi_s2_var(m);
    bind_indi_s2_zscore(m);

    bind_indi_s4_kurtosis(m);
    bind_indi_s4_skewness(m);
    bind_indi_s4(m);

    bind_indi_scale(m);

    m.doc() = R"mydoc(
        MDTX online indicator library
    )mydoc";

#ifdef VERSION_INFO
    m.attr("__version__") = MACRO_STRINGIFY(VERSION_INFO);
#else
    m.attr("__version__") = "dev";
#endif
}
